package com.aq.demo1;

//代理

//真实对象和代理对象实现同一个接口
//代理对象要代理真实角色

//好处
//代理对象可以做很多真实对象做不了的事情。
// 真实对象专注于做自己的事情

public class StaticProxy {

    public static void main(String[] args) {
        You you = new You(); //你要结婚

        WeddingCompany weddingCompany = new WeddingCompany(you);
        weddingCompany.HappyMarry();
        /*同等与
        * new WeddingCompany(new You()).HappyMarry();
        * new Thread().start();
        *
        * */

    }
}

interface Marry{
    void HappyMarry();
}

//真实角色，我去结婚
class You implements Marry{
    @Override
    public void HappyMarry() {
        System.out.println("我要结婚了，超级开心的好吧");
    }
}

//代理角色，帮助结婚
class WeddingCompany implements Marry{

    //代理谁————》真实目标角色
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();   //定义方法
        this.target.HappyMarry();   //真实结婚对象
        after();    //定义方法
    }

    private void before() {
        System.out.println("结婚之前，布置现场");
    }

    private void after() {
        System.out.println("结婚之后，收尾款");
    }


}